home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue58 / ADOX / ADOXU1.pas < prev   
Encoding:
Pascal/Delphi Source File  |  2000-05-01  |  10.9 KB  |  398 lines

  1. unit ADOXU1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, Db, ADODB, Grids, DBGrids, ADOX_TLB, ADOInt;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     Memo1: TMemo;
  13.     ADOConnection1: TADOConnection;
  14.     btnStruct: TButton;
  15.     Button3: TButton;
  16.     Button2: TButton;
  17.     Button4: TButton;
  18.     ADOConnection2: TADOConnection;
  19.     DBGrid1: TDBGrid;
  20.     ADOTable1: TADOTable;
  21.     DataSource1: TDataSource;
  22.     CheckBox1: TCheckBox;
  23.     btnModify: TButton;
  24.     btnAlterCol: TButton;
  25.     Button5: TButton;
  26.     Button6: TButton;
  27.     btnAutoInc: TButton;
  28.     Label1: TLabel;
  29.     edtColName: TEdit;
  30.     btnCreateIndex: TButton;
  31.     btnCreateCIndex: TButton;
  32.     Button7: TButton;
  33.     btnAddPKey: TButton;
  34.     btnDropPKey: TButton;
  35.     btnAddFKey: TButton;
  36.     btnChangeRule: TButton;
  37.     btnDeleteFKey: TButton;
  38.     CheckBox2: TCheckBox;
  39.     Button8: TButton;
  40.     procedure Button1Click(Sender: TObject);
  41.     procedure btnStructClick(Sender: TObject);
  42.     procedure Button3Click(Sender: TObject);
  43.     procedure Button2Click(Sender: TObject);
  44.     procedure Button4Click(Sender: TObject);
  45.     procedure CheckBox1Click(Sender: TObject);
  46.     procedure btnModifyClick(Sender: TObject);
  47.     procedure btnAlterColClick(Sender: TObject);
  48.     procedure Button5Click(Sender: TObject);
  49.     procedure Button6Click(Sender: TObject);
  50.     procedure btnAutoIncClick(Sender: TObject);
  51.     procedure btnCreateIndexClick(Sender: TObject);
  52.     procedure btnCreateCIndexClick(Sender: TObject);
  53.     procedure Button7Click(Sender: TObject);
  54.     procedure btnAddPKeyClick(Sender: TObject);
  55.     procedure btnDropPKeyClick(Sender: TObject);
  56.     procedure btnAddFKeyClick(Sender: TObject);
  57.     procedure btnChangeRuleClick(Sender: TObject);
  58.     procedure btnDeleteFKeyClick(Sender: TObject);
  59.     procedure CheckBox2Click(Sender: TObject);
  60.     procedure Button8Click(Sender: TObject);
  61.   private
  62.     procedure AlterColumn(ADOConnection: TADOConnection; strTable,
  63.       strColumn: string; intSize: integer);
  64.     procedure ShowProperties(Props: ADOX_TLB.Properties);
  65.     { Private declarations }
  66.   public
  67.     { Public declarations }
  68.   end;
  69.  
  70. var
  71.   Form1: TForm1;
  72.  
  73. implementation
  74.  
  75. {$R *.DFM}
  76.  
  77. uses
  78.   ComObj;
  79.  
  80. procedure TForm1.Button1Click(Sender: TObject);
  81. var
  82.   Cat: Catalog;
  83.   intTable: integer;
  84. begin
  85.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  86.   Cat.Set_ActiveConnection(ADOConnection1.ConnectionObject);
  87.   for intTable:=0 to Cat.Tables.Count - 1 do
  88.     if Cat.Tables.Item[intTable].Type_='TABLE' then
  89.       Memo1.Lines.Add(Cat.Tables.Item[intTable].Name);
  90. end;
  91.  
  92. function ColumnToSQLDataType(Col: Column): string;
  93. begin
  94.   Result:=IntToStr(Col.Type_);
  95.   // this list is only a subset of the full list
  96.   with Col do begin
  97.   case Col.Type_ of
  98.   adDate   : Result:='DATE';
  99.   adDouble, adCurrency, adSingle : Result:='NUMERIC('+IntToStr(Col.Precision)+', '+IntToStr(Col.NumericScale)+')';
  100.   adInteger, adSmallInt: Result:='INTEGER('+IntToStr(Col.Precision)+')';
  101.   adVarChar: Result:='VARCHAR('+IntToStr(Col.DefinedSize )+')';
  102.   adWChar  : Result:='VARCHAR('+IntToStr(Col.DefinedSize )+')';
  103.   end;
  104.   end;
  105. end;
  106.  
  107. function TableToSQLCREATETABLE(tbl: Table): string;
  108. var
  109.   intColumn: integer;
  110.   Col: Column;
  111. begin
  112.   Result:='CREATE TABLE '+tbl.Name+' (';
  113.   for intColumn:=0 to tbl.Columns.Count - 1 do
  114.   begin
  115.     Col:=tbl.Columns.Item[intColumn];
  116.     Result:=Result+Col.Name+' '+ColumnToSQLDataType(Col);
  117.     if intColumn <> tbl.Columns.Count - 1 then
  118.       Result:=Result+', ';
  119.   end;
  120.   Result:=Result+')';
  121. end;
  122.  
  123. procedure TForm1.btnStructClick(Sender: TObject);
  124. var
  125.   Cat: Catalog;
  126. begin
  127.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  128.   Cat.Set_ActiveConnection(ADOConnection1.ConnectionObject);
  129.   Memo1.Lines.Add(TableToSQLCREATETABLE(Cat.Tables['Order Details']));
  130. end;
  131.  
  132. procedure TForm1.Button3Click(Sender: TObject);
  133. var
  134.   Cat: Catalog;
  135.   intProp: integer;
  136.   tbl: Table;
  137.   Prop: ADOX_TLB.Property_;
  138.   strValue: string;
  139. begin
  140.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  141.   Cat.Set_ActiveConnection(ADOConnection1.ConnectionObject);
  142.   tbl:=Cat.Tables['Customers'];
  143.   for intProp:=0 to tbl.Properties.Count - 1 do
  144.   begin
  145.     Prop:=tbl.Properties.Item[intProp];
  146.     strValue:=Prop.Value;
  147.     if (Prop.Attributes and adPropWrite) = adPropWrite then
  148.       Memo1.Lines.Add(Prop.Name+'='+strValue)
  149.     else
  150.       Memo1.Lines.Add(Prop.Name+'='+strValue+' (Read only)');
  151.   end;
  152. end;
  153.  
  154. procedure TForm1.ShowProperties(Props: ADOX_TLB.Properties);
  155. var
  156.   intProp: integer;
  157.   Prop: ADOX_TLB.Property_;
  158.   strValue: string;
  159. begin
  160.   for intProp:=0 to Props.Count - 1 do
  161.   begin
  162.     Prop:=Props.Item[intProp];
  163.     strValue:=Prop.Value;
  164.     if (Prop.Attributes and adPropWrite) = adPropWrite then
  165.       Memo1.Lines.Add(Prop.Name+'='+strValue)
  166.     else
  167.       Memo1.Lines.Add(Prop.Name+'='+strValue+' (Read only)');
  168.   end;
  169. end;
  170.  
  171. procedure TForm1.Button2Click(Sender: TObject);
  172. var
  173.   Cat: Catalog;
  174.   strConnection: string;
  175. begin
  176.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  177.   strConnection:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\Test.mdb';
  178.   strConnection:=strConnection+';Jet OLEDB:Engine Type=4';
  179.   Cat.Create(strConnection);
  180. end;
  181.  
  182. procedure TForm1.Button4Click(Sender: TObject);
  183. var
  184.   Cat: Catalog;
  185.   tbl: Table;
  186. begin
  187.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  188.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  189.  
  190.   tbl:=CreateCOMObject(Class_Table) as Table;
  191.   tbl.Name:='Customers';
  192.  
  193.   tbl.Columns.Append('CUSTID'  , adInteger, 0 );
  194.   tbl.Columns.Append('CUSTNAME', adVarWChar, 15);
  195.   tbl.Columns.Append('PHONE'   , adVarWChar, 15);
  196.  
  197.   // create the table
  198.   Cat.Tables.Append(tbl);
  199. end;
  200.  
  201. procedure TForm1.CheckBox1Click(Sender: TObject);
  202. begin
  203.   ADOTable1.Active:=CheckBox1.Checked;
  204. end;
  205.  
  206. procedure TForm1.btnModifyClick(Sender: TObject);
  207. var
  208.   Cat: Catalog;
  209.   tbl: Table;
  210. begin
  211.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  212.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  213.  
  214.   tbl:=Cat.Tables['Customers'];
  215.   tbl.Columns.Delete('PHONE');
  216.   tbl.Columns.Append('FAX', adVarWChar, 15);
  217. end;
  218.  
  219. procedure TForm1.btnAlterColClick(Sender: TObject);
  220. begin
  221.   AlterColumn(ADOConnection2, 'Customers', 'CUSTNAME', 30);
  222. end;
  223.  
  224. procedure TForm1.AlterColumn(ADOConnection: TADOConnection; strTable: string;
  225. strColumn: string; intSize: integer);
  226. var
  227.   Cat: Catalog;
  228.   tbl: Table;
  229.   Col: Column;
  230.   DataType: DataTypeENum;
  231. begin
  232.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  233.   Cat.Set_ActiveConnection(ADOConnection.ConnectionObject);
  234.  
  235.   tbl:=Cat.Tables[strTable];
  236.   Col:=tbl.Columns.Item[strColumn];
  237.   DataType:=Col.Type_;
  238.  
  239.   tbl.Columns.Append('TEMP', DataType, Col.DefinedSize);
  240.   ADOConnection.Execute('UPDATE '+strTable+' SET TEMP='+strColumn);
  241.   tbl.Columns.Delete(strColumn);
  242.   tbl.Columns.Append(strColumn, DataType, intSize);
  243.   ADOConnection.Execute('UPDATE '+strTable+' SET '+strColumn+'=TEMP');
  244.   tbl.Columns.Delete('TEMP');
  245. end;
  246.  
  247. procedure TForm1.Button5Click(Sender: TObject);
  248. begin
  249.   ADOConnection2.Execute('UPDATE Customers SET TEMP=CUSTNAME');
  250. end;
  251.  
  252. procedure TForm1.Button6Click(Sender: TObject);
  253. var
  254.   Cat: Catalog;
  255.   tbl: Table;
  256. begin
  257.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  258.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  259.  
  260.   tbl:=Cat.Tables['Customers'];
  261.   tbl.Columns.Delete(edtColName.Text);
  262. end;
  263.  
  264. procedure TForm1.btnAutoIncClick(Sender: TObject);
  265. var
  266.   Cat: Catalog;
  267.   tbl: OLEVariant;
  268.   Col: Column;
  269. begin
  270.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  271.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  272.  
  273.   tbl:=Cat.Tables['Customers'];
  274.  
  275.   Col:=CreateCOMObject(Class_Column) as Column;
  276.   Col.Name:='CUSTNO';
  277.   Col.Type_:=adInteger;
  278.   Col.ParentCatalog:=Cat;
  279.   ShowProperties(Col.Properties);
  280.   // this line will fail if ParentCatalog is not set
  281.   Col.Properties['Autoincrement'].Value:=True;
  282.   tbl.Columns.Append(Col, adInteger, 0);
  283. end;
  284.  
  285. procedure TForm1.btnCreateIndexClick(Sender: TObject);
  286. var
  287.   Cat: Catalog;
  288.   tbl: Table;
  289. begin
  290.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  291.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  292.  
  293.   tbl:=Cat.Tables['Customers'];
  294.  
  295.   tbl.Indexes.Append('CUSTNAMEINDEX', 'CUSTNAME');
  296. end;
  297.  
  298. procedure TForm1.btnCreateCIndexClick(Sender: TObject);
  299. var
  300.   Cat: Catalog;
  301. begin
  302.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  303.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  304.  
  305.   Cat.Tables['Customers'].Indexes.Append('CUSTNAMECINDEX2', VarArrayOf(['CUSTNAME', 'PHONE']));
  306. end;
  307.  
  308. procedure TForm1.Button7Click(Sender: TObject);
  309. var
  310.   Cat: Catalog;
  311.   tbl: Table;
  312. begin
  313.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  314.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  315.  
  316.   tbl:=CreateCOMObject(Class_Table) as Table;
  317.   tbl.Name:='Orders';
  318.  
  319.   tbl.Columns.Append('ORDERID'  , adInteger, 0 );
  320.   tbl.Columns.Append('ORDERDATE', adDate   , 0);
  321.   tbl.Columns.Append('CUSTNO'   , adInteger, 0);
  322.  
  323.   // create the table
  324.   Cat.Tables.Append(tbl);
  325. end;
  326.  
  327. procedure TForm1.btnAddPKeyClick(Sender: TObject);
  328. var
  329.   Cat: Catalog;
  330. begin
  331.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  332.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  333.  
  334.   Cat.Tables['Customers'].Keys.Append('KEYNAME', adKeyPrimary, 'CUSTNO', '', '');
  335. end;
  336.  
  337. procedure TForm1.btnDropPKeyClick(Sender: TObject);
  338. var
  339.   Cat: Catalog;
  340. begin
  341.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  342.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  343.  
  344.   Cat.Tables['Customers'].Keys.Delete('KEYNAME');
  345. end;
  346.  
  347. procedure TForm1.btnAddFKeyClick(Sender: TObject);
  348. var
  349.   Cat: Catalog;
  350. begin
  351.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  352.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  353.  
  354.   Cat.Tables['Orders'].Keys.Append(
  355.   'FKEY', adKeyForeign, 'CUSTNO', 'Customers', 'CUSTNO');
  356. end;
  357.  
  358. procedure TForm1.btnChangeRuleClick(Sender: TObject);
  359. var
  360.   Cat: Catalog;
  361.   Ky : Key;
  362. begin
  363.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  364.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  365.  
  366.   Ky:=CreateCOMObject(Class_Key) as Key;
  367.   Ky.Name:='FKEY';
  368.   Ky.Type_:=adKeyForeign;
  369.   Ky.Columns.Append('CUSTNO', adInteger, 0);
  370.   Ky.RelatedTable:='Customers';
  371.   Ky.Columns['CUSTNO'].RelatedColumn:='CUSTNO';
  372.   Ky.DeleteRule:=adRICascade;
  373.   Ky.UpdateRule:=adRICascade;
  374.   Cat.Tables['Orders'].Keys.Append(Ky, adKeyForeign, 'CUSTNO', 'Customers', 'CUSTNO');
  375. end;
  376.  
  377. procedure TForm1.btnDeleteFKeyClick(Sender: TObject);
  378. var
  379.   Cat: Catalog;
  380. begin
  381.   Cat:=CreateCOMObject(Class_Catalog) as Catalog;
  382.   Cat.Set_ActiveConnection(ADOConnection2.ConnectionObject);
  383.  
  384.   Cat.Tables['Orders'].Keys.Delete('FKEY');
  385. end;
  386.  
  387. procedure TForm1.CheckBox2Click(Sender: TObject);
  388. begin
  389.   ADOConnection2.Connected:=CheckBox2.Checked;
  390. end;
  391.  
  392. procedure TForm1.Button8Click(Sender: TObject);
  393. begin
  394.   Memo1.Clear;
  395. end;
  396.  
  397. end.
  398.